package com.gagakuai.utils.concurrent;


/*
 * @description: 一个特殊的future: 可以写数据
 * @author: houhong
 * @create: 2024-03-29 22:52
 */
public interface Promise<V> extends Future<V> {

    /*
    *  将这个future 标记为成功，并且通知所有的监听器
    *   如果成功了或者已经失败。那么就会抛出一个非法状态异常  {@link IllegalStateException}.
    *
    */
    Promise<V> setSuccess(V result);

    /*
    *  将这个future 标记为成功，并且通知所有的监听器
    *
    *   在并且只有在 当前的 future 被成功的标记的时候，才会返回true
    *   否则返回false
    *
    */
    boolean trySuccess(V result);



    Promise<V> setFailure(Throwable cause);



    boolean tryFailure(Throwable cause);


    boolean setUncancellable();



    @Override
    Promise<V> addListener(GenericFutureListener<? extends Future<? super V>> listener);

    @Override
    Promise<V> addListeners(GenericFutureListener<? extends Future<? super V>>... listeners);

    @Override
    Promise<V> removeListener(GenericFutureListener<? extends Future<? super V>> listener);

    @Override
    Promise<V> removeListeners(GenericFutureListener<? extends Future<? super V>>... listeners);

    @Override
    Promise<V> await() throws InterruptedException;

    @Override
    Promise<V> awaitUninterruptibly();

    @Override
    Promise<V> sync() throws InterruptedException;

    @Override
    Promise<V> syncUninterruptibly();




















}
